package wigglesubseq376

// 思路：
// 1. 遍历nums，使用prev_state，来记录上一次的状态，1表示上升，-1表示下降; count记录数量初始化为1
// 2. 如果当前的数比上一个数大，则state = 1；如果当前的数比上一个数小，则state = -1；
// 3. 如果当前的数和上一个数相等，则state不变；
// 4. 然后比较cur_sate和prev_state，如果prev_state和cur_state不相等，则count++，并更新prev_state为cur_state
// 5. 最后返回count
// 6. 边界条件：如果nums为空，则返回0；如果nums的长度为1，则返回1；
func WiggleMaxLength(nums []int) int {
	if len(nums) == 0 {
		return 0
	}
	if len(nums) == 1 {
		return 1
	}

	prev_state := 0
	count := 1
	for i := 1; i < len(nums); i++ {
		cur_state := 0
		if nums[i] > nums[i-1] {
			cur_state = 1
		} else if nums[i] < nums[i-1] {
			cur_state = -1
		} else {
			cur_state = prev_state
		}
		if prev_state != cur_state {
			count++
			prev_state = cur_state
		}
	}
	return count
}
